import { constantRoutes, routerMap } from '@/router'
import Layout from '@/views/layout/Layout'

function generateAsyncRouter(routerMap, serverRouterMap) {
  serverRouterMap.forEach(function (item, index) {
    item.component = routerMap[item.component]
    if (item.children && item.children.length > 0) {
      generateAsyncRouter(routerMap, item.children)
    }
  })
  return serverRouterMap;
}
/**
 * 通过meta.role判断是否与当前用户权限匹配
 * @param roles
 * @param route
 */
function hasPermission(roles, route) {
  if (route.meta && route.meta.roles) {
    return roles.some(role => route.meta.roles.includes(role))
  } else {
    return true
  }
}

function getHomeRoutes(roles) {
    var home = {
        path: '/',
        component: Layout,
        redirect: '/homePage',
        meta: {
          title: '首页',
          icon: 'guide'
        },
        children: [
            
        ]
    }
  return home;
}
/**
 * 递归过滤异步路由表，返回符合用户角色权限的路由表
 * @param routes asyncRoutes
 * @param roles
 */
export function filterAsyncRoutes(routes, roles) {
  const res = []

  routes.forEach(route => {
    const tmp = { ...route }
    if (hasPermission(roles, tmp)) {
      if (tmp.children) {
        tmp.children = filterAsyncRoutes(tmp.children, roles)
      }
      res.push(tmp)
    }
  })

  return res
}

const permission = {
  state: {
    routes: [],
    addRoutes: []
  },
  mutations: {
    SET_ROUTES: (state, routes) => {
      state.addRoutes = routes
      state.routes = constantRoutes.concat(routes)
    }
  },
  actions: {
    GenerateRoutes({ commit }, data) {
      return new Promise(resolve => {
        const { roles } = data
      //serverRouterMap().then(response => {
          let accessedRouters
          // let jsons = response.data.data;
          let jsons1 = [
            {
              "path": "/OperateUsers",
              "redirect": null,
              "component": "Layout",
              "name": "OperateUsers",
              "hidden": false,
              "meta": {
                "title": "用户管理",
                "icon": "guide",
              },
              "children": [
                {
                    "path": "/vipIndex",
                    "redirect": null,
                    "component": "vipIndex",
                    "name": "vipIndex",
                    "hidden": false,
                    "meta": {
                      "title": "普通会员管理",
                      "icon":"guide"
                    }
                },
              ]
            },
          ]

          var asyncRouterMap = generateAsyncRouter(routerMap, jsons1)
          accessedRouters = filterAsyncRoutes(asyncRouterMap, roles)
          var res = accessedRouters.concat({ path: '*', redirect: '/404', hidden: true })
          res.unshift(getHomeRoutes(roles))
          commit('SET_ROUTES', res)
          resolve(res)
      //   })
      })
    }
  }
}

export default permission
